﻿#pragma once
#include "Focus.h"
#include <memory>

#define M     2 

class Focus;
class MetaCoup : public Focus
{	
public:
	MetaCoup(); 
	~MetaCoup();
	virtual int preprocess(cv::Mat& mat, Attribute& attr); //预处理
	virtual int findMaxOutline(cv::Mat& mat); //（已经废弃）
	virtual int findMaxOutline(cv::Mat& mat, Attribute& attr); //寻找满足条件的所有轮廓
	virtual int draw(cv::Mat& mat, Attribute& attr); //拟合并绘画
	virtual cv::Point2f getMaxOutlineCenter(Attribute& attr) const; //获取目标或者最终轮廓的中心
	virtual cv::Point2f* getTwoRoundholeCenter(cv::Mat& mat, Attribute& attr); //获取两个圆孔的中心
private:
	int Auxpreprocess(cv::Mat& mat, Attribute& attr); //辅助预处理
	std::pair<std::vector<cv::Point>, std::vector<cv::Point>> getTwoRoundOutlines(); //获取两个圆孔轮廓
	int preprocessCircle(cv::Mat& mat, Attribute& attr); //预处理圆
	int preprocessRect(cv::Mat& mat, Attribute& attr); //预处理矩形
private:
	std::shared_ptr<Focus> fcsptr; //focus指针
	cv::Mat closed; //处理后的图像
	cv::Point2f* res; //存储两个圆孔中心位置
	std::vector<std::vector<cv::Point>> contours_; //满足条件的所有轮廓
};

